package com.own.component.store.redis.method;

import com.own.component.store.core.method.StoreSet;
import org.redisson.api.RedissonClient;

import java.util.List;
import java.util.Set;

/**
 * DefaultRedisStoreSet
 *
 * @author chenxueli
 * @date 2022-06-15 03:14:15
 */
public class DefaultRedisStoreSet<T> extends DefaultBaseStoreMethod implements StoreSet<T> {

    public DefaultRedisStoreSet(RedissonClient redissonClient) {
        super(redissonClient);
    }

    /**
     * 获取set集合
     *
     * @param name 唯一key
     * @return set集合
     */
    @Override
    public Set<T> members(String name) {
        return getRedissonClient().<T>getSet(buildKey(name)).readAll();
    }

    /**
     * 插入值
     *
     * @param name  唯一key
     * @param value 值
     */
    @Override
    public void add(String name, T value) {
        getRedissonClient().getSet(buildKey(name)).add(value);
    }

    /**
     * 插入值
     *
     * @param name   唯一key
     * @param values 值列表
     */
    @SafeVarargs
    @Override
    public final void add(String name, T... values) {
        getRedissonClient().getSet(buildKey(name)).addAll(List.of(values));
    }

    /**
     * 是否包含
     *
     * @param name  唯一key
     * @param value 值
     * @return 是否包含
     */
    @Override
    public boolean contains(String name, T value) {
        return getRedissonClient().getSet(buildKey(name)).contains(value);
    }

    /**
     * 批量移除
     *
     * @param name   唯一key
     * @param values 值列表
     */
    @SafeVarargs
    @Override
    public final void remove(String name, T... values) {
        var key = buildKey(name);
        List.of(values).forEach(getRedissonClient().getSet(key)::remove);
    }

}
